home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 05 / 6 / DISK0564.ZIP / SOURCE.ARC / ASM.ARC / CONSOLE.ASM < prev    next >
Assembly Source File  |  1987-11-01  |  3KB  |  137 lines

  1.         TITLE   MSDOS CONSOLE I/O ROUTINES
  2.         .XLIST
  3.         INCLUDE ASCII.DEF
  4.         INCLUDE MSDOS2.DEF
  5.         .LIST
  6.  
  7.     DOSSEG
  8.     .MODEL SMALL
  9.     .CODE
  10. EXTRN    UC:NEAR
  11. PUBLIC  COUT,SCIN,CIN,CLRCO,CRLF,PRTSTR,ERRORMSG,GETYORN
  12.  
  13. ;       CONSOLE I/O ROUTINES FOR MSDOS
  14.  
  15. ;    PRTSTR = PRINTS ASCIIZ STRING TO STDOUT
  16. ;       ENTRY: DS:DX POINTS TO MSG (ASCIIZ STRING)
  17. ;       USES: AX,DX,FLAGS
  18. ;
  19. PRTSTR    PROC   NEAR
  20.         PUSH    BX
  21. PRTSTR1: MOV    BX,DX
  22.         MOV     AL,BYTE PTR [BX]
  23.         CMP     AL,0
  24.         JZ      PRTSTR2
  25.     CALL    COUT
  26.         INC     DX
  27.         JMP     PRTSTR1
  28. PRTSTR2:
  29.         POP     BX
  30.         RET
  31. PRTSTR    ENDP
  32.  
  33. ;       COUT = OUTPUT CHARACTER IN AL
  34. ;
  35. COUT    PROC    NEAR
  36.         PUSH    DX
  37.         PUSH    AX
  38.         MOV     DL,AL
  39.         MOV     AH,STD_CON_OUTPUT
  40.         INT     DOS
  41.         POP     AX
  42.         POP     DX
  43.         RET
  44. COUT    ENDP
  45.  
  46. ;       SCIN = SEE IF CONSOLE CHARACTER AVAILABLE
  47. ;       RETURNS 'C'=1 IF NOT AVAILABLE
  48. ;       ELSE RETURNS CHAR. IN AL
  49. ;
  50. SCIN    PROC    NEAR
  51.         MOV     AH,CON_INPUT_STATUS
  52.         INT     DOS
  53.         CMP     AL,0
  54.         JNZ     SHORT GOTSOME
  55.         STC
  56.         RET
  57. GOTSOME:
  58.         CALL    NEAR PTR CIN
  59.         CLC
  60.         RET
  61.  
  62. SCIN    ENDP
  63.  
  64. ;       CIN = GET CHARACTER FROM KEYBOARD
  65. ;       EXIT:  CHAR IN AL
  66. ;
  67. CIN     PROC    NEAR
  68.         MOV     AH,CON_INPUT_NO_ECHO
  69.         INT     DOS
  70.         RET
  71. CIN     ENDP
  72.  
  73. ;       CLRCO = CLEAR TYPE-AHEAD BUFFER
  74. ;
  75. CLRCO   PROC    NEAR
  76. CLRC1:  CALL    SCIN
  77.         JNC     CLRC1
  78.         RET
  79. CLRCO   ENDP
  80.  
  81. ;
  82. ;       CRLF = SEND CR + LF TO CONSOLE
  83. ;
  84. CRLF    PROC    NEAR
  85.         MOV     AL,CR
  86.         CALL    COUT
  87.         MOV     AL,LF
  88.         CALL    COUT
  89.         RET
  90. CRLF    ENDP
  91.  
  92. ;       ERRORMSG = WRITE MESSAGE TO STD. ERROR OUTPUT
  93. ;       ENTRY: DS:DX POINTS TO MSG (ASCIIZ STRING)
  94. ;       USES: AX,DX,FLAGS
  95. ;
  96. ERRORMSG PROC   NEAR
  97.         PUSH    BX
  98.         PUSH    CX
  99. ERRMSG1: 
  100.     MOV    BX,DX
  101.         MOV     AL,BYTE PTR [BX]
  102.         XCHG    DX,BX
  103.         CMP     AL,0
  104.         JZ      ERRMSG2
  105.         MOV     CX,1
  106.         MOV     AH,WRITE
  107.         MOV     BX,2
  108.         INT     DOS
  109.         INC     DX
  110.         JMP     ERRMSG1
  111. ERRMSG2:
  112.         POP     CX
  113.         POP     BX
  114.         RET
  115. ERRORMSG ENDP
  116.  
  117. ; GETYORN = GET 'Y' OR 'N' RESPONSE FROM CONSOLE
  118. ;         RETURNS CHAR. ( Y OR N ) IN AX
  119.  
  120. GETYORN PROC    NEAR
  121.     CALL    CLRCO            ;CLEAR TYPE-AHEAD
  122. NOTYN:    CALL    CIN            ;GET CONSOLE CHAR.
  123.     CALL    UC            ;MAKE UPPER-CASE
  124.     CMP    AL,'Y'
  125.     JE    GOTY
  126.     CMP    AL,'N'
  127.     JNE    NOTYN            ;IF NOT Y OR N
  128. GOTY:    PUSH    AX
  129.     CALL    COUT
  130.     CALL    CRLF
  131.     POP    AX
  132.     MOV    AH,0            ;IN CASE USER DOES WORD COMPARISON
  133.     RET
  134. GETYORN ENDP
  135.  
  136.         END
  137.